Clase 12- Agrupamientos, Reframes

Fecha de publicación

25 de noviembre de 2024

Objetivo:

Usar funciones de dplyr para poder agrupar datos y obtener valores al # aplicar una función para cada grupo

Cargar Datos y Paquetes

library(tidyverse)

df_gapminder_csv <- read.csv('https://raw.githubusercontent.com/javendaXgh/datos/refs/heads/master/gapminder.csv')%>%
  select(-X)%>%
  as_tibble()

df_gapminder <- gapminder::gapminder

df_gastosaludmundial <- read.csv('https://raw.githubusercontent.com/UCVeconomia2024-2/scripts/refs/heads/main/data_in/clase_12/IHME/IHME_HEALTH_SPENDING_1995_2021/IHME_HEALTH_SPENDING_1995_2021_Y2024M07D23.CSV')

Info sobre el conjunto de datos df_gastosaludmundial disponible en

  1. https://ghdx.healthdata.org/record/ihme-data/global-health-spending-1995-2021

  2. https://github.com/UCVeconomia2024-2/scripts/tree/main/data_in/clase_12/IHME

Procesamientos:

Cada enunciado es un problema a resolver

0- Funcionamiento group_by

df_gapminder_csv%>%
  group_by(country)
# A tibble: 1,704 × 6
# Groups:   country [142]
   country     continent  year lifeExp      pop gdpPercap
   <chr>       <chr>     <int>   <dbl>    <int>     <dbl>
 1 Afghanistan Asia       1952    28.8  8425333      779.
 2 Afghanistan Asia       1957    30.3  9240934      821.
 3 Afghanistan Asia       1962    32.0 10267083      853.
 4 Afghanistan Asia       1967    34.0 11537966      836.
 5 Afghanistan Asia       1972    36.1 13079460      740.
 6 Afghanistan Asia       1977    38.4 14880372      786.
 7 Afghanistan Asia       1982    39.9 12881816      978.
 8 Afghanistan Asia       1987    40.8 13867957      852.
 9 Afghanistan Asia       1992    41.7 16317921      649.
10 Afghanistan Asia       1997    41.8 22227415      635.
# ℹ 1,694 more rows

1- Obtener cantidad observaciones por país

df_gapminder_csv%>%
  group_by(country)%>%
  reframe(cdad_obs=n())
# A tibble: 142 × 2
   country     cdad_obs
   <chr>          <int>
 1 Afghanistan       12
 2 Albania           12
 3 Algeria           12
 4 Angola            12
 5 Argentina         12
 6 Australia         12
 7 Austria           12
 8 Bahrain           12
 9 Bangladesh        12
10 Belgium           12
# ℹ 132 more rows

2- Obtener cantidad observaciones por continente

df_gapminder_csv%>%
  group_by(continent)%>%
  reframe(cdad_obs=n())
# A tibble: 5 × 2
  continent cdad_obs
  <chr>        <int>
1 Africa         624
2 Americas       300
3 Asia           396
4 Europe         360
5 Oceania         24
# equivalente, aunque no es la misma estructura de datos
df_gapminder_csv%>%
  group_by(continent)%>%
  count()
# A tibble: 5 × 2
# Groups:   continent [5]
  continent     n
  <chr>     <int>
1 Africa      624
2 Americas    300
3 Asia        396
4 Europe      360
5 Oceania      24

3- Obtener gdpPercap promedio por período y continente

df_gapminder_csv%>%
  group_by(continent, year)%>%
  reframe(gdpPercap_promedio= mean(gdpPercap))#
# A tibble: 60 × 3
   continent  year gdpPercap_promedio
   <chr>     <int>              <dbl>
 1 Africa     1952              1253.
 2 Africa     1957              1385.
 3 Africa     1962              1598.
 4 Africa     1967              2050.
 5 Africa     1972              2340.
 6 Africa     1977              2586.
 7 Africa     1982              2482.
 8 Africa     1987              2283.
 9 Africa     1992              2282.
10 Africa     1997              2379.
# ℹ 50 more rows

4- Obtener gdpPercap total por período

df_gapminder_csv%>%
  group_by(year)%>%
  reframe(gdpPercap_promedio= mean(gdpPercap))
# A tibble: 12 × 2
    year gdpPercap_promedio
   <int>              <dbl>
 1  1952              3725.
 2  1957              4299.
 3  1962              4726.
 4  1967              5484.
 5  1972              6770.
 6  1977              7313.
 7  1982              7519.
 8  1987              7901.
 9  1992              8159.
10  1997              9090.
11  2002              9918.
12  2007             11680.

5- Obtener población promedio por país para todos los períodos

df_gapminder_csv%>%
  group_by(country)%>%
  reframe(poblacion_promedio= mean(pop))#%>%
# A tibble: 142 × 2
   country     poblacion_promedio
   <chr>                    <dbl>
 1 Afghanistan          15823715.
 2 Albania               2580249.
 3 Algeria              19875406.
 4 Angola                7309390.
 5 Argentina            28602240.
 6 Australia            14649312.
 7 Austria               7583298.
 8 Bahrain                373913.
 9 Bangladesh           90755395.
10 Belgium               9725119.
# ℹ 132 more rows
  # filter(country=='Venezuela')

6- Crear una serie de valores estadísticos por país para todos los períodos

df_gapminder_csv%>%
  group_by(country)%>%
  reframe(poblacion_prom= mean(pop), 
            gdpPercap_sum= sum(gdpPercap),
            gdp_prom= mean(gdpPercap),
            gdp_max= max(gdpPercap),
            gdp_min= min(gdpPercap))#%>%
# A tibble: 142 × 6
   country     poblacion_prom gdpPercap_sum gdp_prom gdp_max gdp_min
   <chr>                <dbl>         <dbl>    <dbl>   <dbl>   <dbl>
 1 Afghanistan      15823715.         9632.     803.    978.    635.
 2 Albania           2580249.        39064.    3255.   5937.   1601.
 3 Algeria          19875406.        53112.    4426.   6223.   2449.
 4 Angola            7309390.        43285.    3607.   5523.   2277.
 5 Argentina        28602240.       107467.    8956.  12779.   5911.
 6 Australia        14649312.       239767.   19981.  34435.  10040.
 7 Austria           7583298.       244943.   20412.  36126.   6137.
 8 Bahrain            373913.       216932.   18078.  29796.   9867.
 9 Bangladesh       90755395.         9811.     818.   1391.    630.
10 Belgium           9725119.       238809.   19901.  33693.   8343.
# ℹ 132 more rows
  # filter(country=='Venezuela')

7- Encadenamiento para clasificar por continente a los países según su PIB

7.a- crear columna pib_mm

df_gapminder_csv%>%
  filter(year==2007)%>%
  mutate(pib_mm=(gdpPercap*pop)/1000000) # cifras en mm
# A tibble: 142 × 7
   country     continent  year lifeExp       pop gdpPercap  pib_mm
   <chr>       <chr>     <int>   <dbl>     <int>     <dbl>   <dbl>
 1 Afghanistan Asia       2007    43.8  31889923      975.  31079.
 2 Albania     Europe     2007    76.4   3600523     5937.  21376.
 3 Algeria     Africa     2007    72.3  33333216     6223. 207445.
 4 Angola      Africa     2007    42.7  12420476     4797.  59584.
 5 Argentina   Americas   2007    75.3  40301927    12779. 515034.
 6 Australia   Oceania    2007    81.2  20434176    34435. 703658.
 7 Austria     Europe     2007    79.8   8199783    36126. 296229.
 8 Bahrain     Asia       2007    75.6    708573    29796.  21113.
 9 Bangladesh  Asia       2007    64.1 150448339     1391. 209312.
10 Belgium     Europe     2007    79.4  10392226    33693. 350141.
# ℹ 132 more rows

7.b- cuantiles según agrupamiento por continente

df_gapminder_csv%>%
  filter(year==2007)%>%
  mutate(pib_mm=(gdpPercap*pop)/1000000)%>%
  group_by(continent)%>%
  reframe(cuantil_1=quantile(pib_mm ,p=0.25),
          cuantil_3=quantile(pib_mm, p=0.75),
          country,
          pib_mm)
# A tibble: 142 × 5
   continent cuantil_1 cuantil_3 country                   pib_mm
   <chr>         <dbl>     <dbl> <chr>                      <dbl>
 1 Africa        5662.    32146. Algeria                  207445.
 2 Africa        5662.    32146. Angola                    59584.
 3 Africa        5662.    32146. Benin                     11643.
 4 Africa        5662.    32146. Botswana                  20604.
 5 Africa        5662.    32146. Burkina Faso              17435.
 6 Africa        5662.    32146. Burundi                    3609.
 7 Africa        5662.    32146. Cameroon                  36138.
 8 Africa        5662.    32146. Central African Republic   3085.
 9 Africa        5662.    32146. Chad                      17448.
10 Africa        5662.    32146. Comoros                     701.
# ℹ 132 more rows

7.c- crear columna para asignación de categorías con función case_when

df_gapminder_csv%>%
  filter(year==2007)%>%
  mutate(pib_mm=(gdpPercap*pop)/1000000)%>%
  group_by(continent)%>%
  reframe(cuantil_1=quantile(pib_mm,p=0.25),
          cuantil_3=quantile(pib_mm,p=0.75),
          country,
          pib_mm)%>%
  mutate(pib_clasificacion=case_when(pib_mm < cuantil_1~'bajo',
                                     pib_mm>= cuantil_1 & pib_mm <= cuantil_3 ~ 'medio',
                                     pib_mm> cuantil_3 ~ 'alto'))
# A tibble: 142 × 6
   continent cuantil_1 cuantil_3 country                pib_mm pib_clasificacion
   <chr>         <dbl>     <dbl> <chr>                   <dbl> <chr>            
 1 Africa        5662.    32146. Algeria                2.07e5 alto             
 2 Africa        5662.    32146. Angola                 5.96e4 alto             
 3 Africa        5662.    32146. Benin                  1.16e4 medio            
 4 Africa        5662.    32146. Botswana               2.06e4 medio            
 5 Africa        5662.    32146. Burkina Faso           1.74e4 medio            
 6 Africa        5662.    32146. Burundi                3.61e3 bajo             
 7 Africa        5662.    32146. Cameroon               3.61e4 alto             
 8 Africa        5662.    32146. Central African Repub… 3.08e3 bajo             
 9 Africa        5662.    32146. Chad                   1.74e4 medio            
10 Africa        5662.    32146. Comoros                7.01e2 bajo             
# ℹ 132 more rows

7.d- asignar a un nuevo objeto

df_gap_clasi_pibcontinent <- df_gapminder_csv%>%
  filter(year==2007)%>%
  mutate(pib_mm=(gdpPercap*pop)/1000000)%>%
  group_by(continent)%>%
  reframe(cuantil_1=quantile(pib_mm,p=0.25),
          cuantil_3=quantile(pib_mm,p=0.75),
          country,
          pib_mm)%>%
  mutate(pib_clasificacion=case_when(pib_mm < cuantil_1~'bajo',
                                     pib_mm>= cuantil_1 & pib_mm <= cuantil_3 ~ 'medio',
                                     pib_mm> cuantil_3 ~ 'alto'))%>%
  select(-cuantil_1, -cuantil_3)

7.e- subsetting países de América reordenados por criterio de pib_mm

df_gap_clasi_pibcontinent_ame <- df_gap_clasi_pibcontinent%>%
  filter(continent=='Americas')%>%
  arrange(desc(pib_mm))

Visualizar los datos

ggplot(data=df_gap_clasi_pibcontinent_ame)+
  geom_col(mapping = aes(x=country, 
                         y= pib_mm,
                         fill = pib_clasificacion))

7.f- crear factor para dato categórico y resolver orden de visualización de las columnas

df_gap_clasi_pibcontinent_ame <- df_gap_clasi_pibcontinent%>%
  filter(continent=='Americas')%>%
  arrange(desc(pib_mm))%>%
  mutate(country =  factor(country, levels = country))

Visualizar Datos con columna de países como factor

ggplot(data=df_gap_clasi_pibcontinent_ame)+
  geom_col(mapping = aes(x=country, 
                         y= pib_mm,
                         fill = pib_clasificacion))

8. Salidas distintas en group_by según más de un criterio

8.1 según criterio country & continent

df_gapminder_csv%>%
  group_by( country, continent)%>%
  reframe(gdpPercap_promedio= mean(gdpPercap))
# A tibble: 142 × 3
   country     continent gdpPercap_promedio
   <chr>       <chr>                  <dbl>
 1 Afghanistan Asia                    803.
 2 Albania     Europe                 3255.
 3 Algeria     Africa                 4426.
 4 Angola      Africa                 3607.
 5 Argentina   Americas               8956.
 6 Australia   Oceania               19981.
 7 Austria     Europe                20412.
 8 Bahrain     Asia                  18078.
 9 Bangladesh  Asia                    818.
10 Belgium     Europe                19901.
# ℹ 132 more rows

8.2 según criterio continent & country

df_gapminder_csv%>%
  group_by(continent, country)%>%
  reframe(gdpPercap_promedio= mean(gdpPercap))
# A tibble: 142 × 3
   continent country                  gdpPercap_promedio
   <chr>     <chr>                                 <dbl>
 1 Africa    Algeria                               4426.
 2 Africa    Angola                                3607.
 3 Africa    Benin                                 1155.
 4 Africa    Botswana                              5032.
 5 Africa    Burkina Faso                           844.
 6 Africa    Burundi                                472.
 7 Africa    Cameroon                              1775.
 8 Africa    Central African Republic               959.
 9 Africa    Chad                                  1165.
10 Africa    Comoros                               1314.
# ℹ 132 more rows